# Python pickle模块：实现Python对象的持久化存储

## pickle.dumps()函数
'''
dumps(obj, protocol = None, *, fix_imports = True)
    obj: 要转换的对象。
    protocol: pickle 的转码协议，取值为 0、1、2、3、4，其中 0、1、2 对应 Python 早期的版本，3 和 4 则对应 Python 3.x 版本及之后的版本。
        未指定情况下，默认为 3。
    其它参数: 为了兼容 Python 2.x 版本而保留的参数，Python 3.x 中可以忽略。
'''
import pickle
tup1 = ('I love Python', {1, 2, 3}, None)
# 使用 dumps() 函数将 tup1 转成 p1
p1 = pickle.dumps(tup1)
print(p1)

print()

## pickle.loads()函数
'''
loads(data, *, fix_ipmorts = True, encoding = 'ASCII', errors = 'strict')
    data: 要转换的二进制对象。
    其它参数：为了兼容 Python 2.x 版本而保留的参数。
'''
# 使用 loads() 函数将 p1 转成 Python 对象
t2 = pickle.loads(p1)
print(t2)

print()

## pickle.dump()函数
'''
dump(obj, file, protocol = None, *, fix_imports = True)
    obj: 要转换的 Python 对象。
    file: 转换到指定的二进制文件中，要求该文件必须是以“wb”的打开方式进行操作。
    protocol: 和 dumps() 函数中 protocol 参数的含义完全相同。
    其它参数：为了兼容以前 Python 2.x 版本而保留的参数，可以忽略。
'''
with open("s.txt", "wb") as file:
    pickle.dump(tup1, file) # 用 dump 函数将 Python 对象转成二进制对象文件

## pickle.load()函数
'''
load(file, *, fix_imports = True, encoding = 'ASCII', errors = 'strict')
    file: 表示要转换的二进制对象文件（必须以“rb”的打开方式操作文件）。
    其它参数：为了兼容以前 Python 2.x 版本而保留的参数，可以忽略。
'''
with open("s.txt", "rb") as file:
    t3 = pickle.load(file) # 将二进制文件对象转换成 Python 对象
    print(t3)
